home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / mmdf / mmdf-IIb.43 / uip / ucbmail / def.h < prev    next >
Encoding:
C/C++ Source or Header  |  1986-06-03  |  8.5 KB  |  318 lines

  1. /*
  2.  * Copyright (c) 1980 Regents of the University of California.
  3.  * All rights reserved.  The Berkeley software License Agreement
  4.  * specifies the terms and conditions for redistribution.
  5.  *
  6.  *    @(#)def.h    5.2 (Berkeley) 11/2/85
  7.  */
  8.  
  9. #include <sys/param.h>        /* includes <sys/types.h> */
  10. #include <signal.h>
  11. #include <stdio.h>
  12. #include <sgtty.h>
  13. #include "./local.h"
  14.  
  15. /*
  16.  * Mail -- a mail program
  17.  *
  18.  * Commands are:
  19.  *    t <message list>        print out these messages
  20.  *    r <message list>        reply to messages
  21.  *    m <user list>            mail to users (analogous to send)
  22.  *    e <message list>        edit messages
  23.  *    c [directory]            chdir to dir or home if none
  24.  *    x                exit quickly
  25.  *    w <message list> file        save messages in file
  26.  *    q                quit, save remaining stuff in mbox
  27.  *    d <message list>        delete messages
  28.  *    u <message list>        undelete messages
  29.  *    h                print message headers
  30.  *
  31.  * Author: Kurt Shoens (UCB) March 25, 1978
  32.  */
  33.  
  34.  
  35. #define    ESCAPE        '~'        /* Default escape for sending */
  36. #define    NMLSIZE        1024        /* max names in a message list */
  37. #define    PATHSIZE    1024        /* Size of pathnames throughout */
  38. #define    NAMESIZE    32        /* Max size of user name */
  39. #define    HSHSIZE        59        /* Hash size for aliases and vars */
  40. #define    HDRFIELDS    3        /* Number of header fields */
  41. #define    LINESIZE    BUFSIZ        /* max readable line width */
  42. #define    STRINGSIZE    ((unsigned) 128)/* Dynamic allocation units */
  43. #define ALIGNMENT    4        /* Alignment for string allocations */
  44. #define    MAXARGC        1024        /* Maximum list of raw strings */
  45. #define    NOSTR        ((char *) 0)    /* Null string pointer */
  46. #define    MAXEXP        25        /* Maximum expansion of aliases */
  47. #define    equal(a, b)    (strcmp(a,b)==0)/* A nice function to string compare */
  48.  
  49. struct message {
  50.     short    m_flag;            /* flags, see below */
  51.     short    m_block;        /* block number of this message */
  52.     short    m_offset;        /* offset in block of message */
  53.     long    m_size;            /* Bytes in the message */
  54.     short    m_lines;        /* Lines in the message */
  55. };
  56.  
  57. /*
  58.  * flag bits.
  59.  */
  60.  
  61. #define    MUSED        (1<<0)        /* entry is used, but this bit isn't */
  62. #define    MDELETED    (1<<1)        /* entry has been deleted */
  63. #define    MSAVED        (1<<2)        /* entry has been saved */
  64. #define    MTOUCH        (1<<3)        /* entry has been noticed */
  65. #define    MPRESERVE    (1<<4)        /* keep entry in sys mailbox */
  66. #define    MMARK        (1<<5)        /* message is marked! */
  67. #define    MODIFY        (1<<6)        /* message has been modified */
  68. #define    MNEW        (1<<7)        /* message has never been seen */
  69. #define    MREAD        (1<<8)        /* message has been read sometime. */
  70. #define    MSTATUS        (1<<9)        /* message status has changed */
  71. #define    MBOX        (1<<10)        /* Send this to mbox, regardless */
  72.  
  73. /*
  74.  * Format of the command description table.
  75.  * The actual table is declared and initialized
  76.  * in lex.c
  77.  */
  78.  
  79. struct cmd {
  80.     char    *c_name;        /* Name of command */
  81.     int    (*c_func)();        /* Implementor of the command */
  82.     short    c_argtype;        /* Type of arglist (see below) */
  83.     short    c_msgflag;        /* Required flags of messages */
  84.     short    c_msgmask;        /* Relevant flags of messages */
  85. };
  86.  
  87. /* Yechh, can't initialize unions */
  88.  
  89. #define    c_minargs c_msgflag        /* Minimum argcount for RAWLIST */
  90. #define    c_maxargs c_msgmask        /* Max argcount for RAWLIST */
  91.  
  92. /*
  93.  * Argument types.
  94.  */
  95.  
  96. #define    MSGLIST     0        /* Message list type */
  97. #define    STRLIST     1        /* A pure string */
  98. #define    RAWLIST     2        /* Shell string list */
  99. #define    NOLIST     3        /* Just plain 0 */
  100. #define    NDMLIST     4        /* Message list, no defaults */
  101.  
  102. #define    P    040        /* Autoprint dot after command */
  103. #define    I    0100        /* Interactive command bit */
  104. #define    M    0200        /* Legal from send mode bit */
  105. #define    W    0400        /* Illegal when read only bit */
  106. #define    F    01000        /* Is a conditional command */
  107. #define    T    02000        /* Is a transparent command */
  108. #define    R    04000        /* Cannot be called from collect */
  109.  
  110. /*
  111.  * Oft-used mask values
  112.  */
  113.  
  114. #define    MMNORM        (MDELETED|MSAVED)/* Look at both save and delete bits */
  115. #define    MMNDEL        MDELETED    /* Look only at deleted bit */
  116.  
  117. /*
  118.  * Structure used to return a break down of a head
  119.  * line (hats off to Bill Joy!)
  120.  */
  121.  
  122. struct headline {
  123.     char    *l_from;    /* The name of the sender */
  124.     char    *l_tty;        /* His tty string (if any) */
  125.     char    *l_date;    /* The entire date string */
  126. };
  127.  
  128. #define    GTO    1        /* Grab To: line */
  129. #define    GSUBJECT 2        /* Likewise, Subject: line */
  130. #define    GCC    4        /* And the Cc: line */
  131. #define    GBCC    8        /* And also the Bcc: line */
  132. #define    GMASK    (GTO|GSUBJECT|GCC|GBCC)
  133.                 /* Mask of places from whence */
  134.  
  135. #define    GNL    16        /* Print blank line after */
  136. #define    GDEL    32        /* Entity removed from list */
  137. #define    GCOMMA    64        /* detract puts in commas */
  138.  
  139. /*
  140.  * Structure used to pass about the current
  141.  * state of the user-typed message header.
  142.  */
  143.  
  144. struct header {
  145.     char    *h_to;            /* Dynamic "To:" string */
  146.     char    *h_subject;        /* Subject string */
  147.     char    *h_cc;            /* Carbon copies string */
  148.     char    *h_bcc;            /* Blind carbon copies */
  149.     int    h_seq;            /* Sequence for optimization */
  150. };
  151.  
  152. /*
  153.  * Structure of namelist nodes used in processing
  154.  * the recipients of mail and aliases and all that
  155.  * kind of stuff.
  156.  */
  157.  
  158. struct name {
  159.     struct    name *n_flink;        /* Forward link in list. */
  160.     struct    name *n_blink;        /* Backward list link */
  161.     short    n_type;            /* From which list it came */
  162.     char    *n_name;        /* This fella's name */
  163. };
  164.  
  165. /*
  166.  * Structure of a variable node.  All variables are
  167.  * kept on a singly-linked list of these, rooted by
  168.  * "variables"
  169.  */
  170.  
  171. struct var {
  172.     struct    var *v_link;        /* Forward link to next variable */
  173.     char    *v_name;        /* The variable's name */
  174.     char    *v_value;        /* And it's current value */
  175. };
  176.  
  177. struct group {
  178.     struct    group *ge_link;        /* Next person in this group */
  179.     char    *ge_name;        /* This person's user name */
  180. };
  181.  
  182. struct grouphead {
  183.     struct    grouphead *g_link;    /* Next grouphead in list */
  184.     char    *g_name;        /* Name of this group */
  185.     struct    group *g_list;        /* Users in group. */
  186. };
  187.  
  188. #define    NIL    ((struct name *) 0)    /* The nil pointer for namelists */
  189. #define    NONE    ((struct cmd *) 0)    /* The nil pointer to command tab */
  190. #define    NOVAR    ((struct var *) 0)    /* The nil pointer to variables */
  191. #define    NOGRP    ((struct grouphead *) 0)/* The nil grouphead pointer */
  192. #define    NOGE    ((struct group *) 0)    /* The nil group pointer */
  193.  
  194. /*
  195.  * Structure of the hash table of ignored header fields
  196.  */
  197. struct ignore {
  198.     struct ignore    *i_link;    /* Next ignored field in bucket */
  199.     char        *i_field;    /* This ignored field */
  200. };
  201.  
  202. /*
  203.  * Token values returned by the scanner used for argument lists.
  204.  * Also, sizes of scanner-related things.
  205.  */
  206.  
  207. #define    TEOL    0            /* End of the command line */
  208. #define    TNUMBER    1            /* A message number */
  209. #define    TDASH    2            /* A simple dash */
  210. #define    TSTRING    3            /* A string (possibly containing -) */
  211. #define    TDOT    4            /* A "." */
  212. #define    TUP    5            /* An "^" */
  213. #define    TDOLLAR    6            /* A "$" */
  214. #define    TSTAR    7            /* A "*" */
  215. #define    TOPEN    8            /* An '(' */
  216. #define    TCLOSE    9            /* A ')' */
  217. #define TPLUS    10            /* A '+' */
  218.  
  219. #define    REGDEP    2            /* Maximum regret depth. */
  220. #define    STRINGLEN    1024        /* Maximum length of string token */
  221.  
  222. /*
  223.  * Constants for conditional commands.  These describe whether
  224.  * we should be executing stuff or not.
  225.  */
  226.  
  227. #define    CANY        0        /* Execute in send or receive mode */
  228. #define    CRCV        1        /* Execute in receive mode only */
  229. #define    CSEND        2        /* Execute in send mode only */
  230.  
  231. /*
  232.  * Kludges to handle the change from setexit / reset to setjmp / longjmp
  233.  */
  234.  
  235. #define    setexit()    setjmp(srbuf)
  236. #define    reset(x)    longjmp(srbuf, x)
  237.  
  238. /*
  239.  * VM/UNIX has a vfork system call which is faster than forking.  If we
  240.  * don't have it, fork(2) will do . . .
  241.  */
  242.  
  243. #ifndef VMUNIX
  244. #define    vfork()    fork()
  245. #endif
  246. #ifndef    SIGRETRO
  247. #define    sigchild()
  248. #endif
  249.  
  250. /*
  251.  * 4.2bsd signal interface help...
  252.  */
  253. #ifdef V4_2BSD
  254. #define    sigset(s, a)    signal(s, a)
  255. #define    sigsys(s, a)    signal(s, a)
  256. #endif
  257.  
  258. /*
  259.  * Forward declarations of routine types to keep lint and cc happy.
  260.  */
  261.  
  262. FILE    *Fdopen();
  263. FILE    *collect();
  264. FILE    *infix();
  265. FILE    *mesedit();
  266. FILE    *mespipe();
  267. FILE    *popen();
  268. FILE    *setinput();
  269. char    *addto();
  270. char    *arpafix();
  271. char    *calloc();
  272. char    *copy();
  273. char    *copyin();
  274. char    *detract();
  275. char    *expand();
  276. char    *gets();
  277. char    *hfield();
  278. char    *index();
  279. char    *name1();
  280. char    *nameof();
  281. char    *nextword();
  282. char    *getenv();
  283. char    *getfilename();
  284. char    *hcontents();
  285. char    *mktemp();
  286. char    *netmap();
  287. char    *netname();
  288. char    *readtty();
  289. char    *reedit();
  290. char    *revarpa();
  291. char    *rindex();
  292. char    *rpair();
  293. char    *salloc();
  294. char    *savestr();
  295. char    *snarf();
  296. char    *strcat();
  297. char    *strcpy();
  298. char    *strncpy();
  299. char    *value();
  300. char    *vcopy();
  301. off_t    fsize();
  302. #ifndef V4_2BSD
  303. int    (*sigset())();
  304. #endif
  305. struct    cmd    *lex();
  306. struct    grouphead    *findgroup();
  307. struct    name    *cat();
  308. struct    name    *delname();
  309. struct    name    *elide();
  310. struct    name    *extract();
  311. struct    name    *gexpand();
  312. struct    name    *outof();
  313. struct    name    *put();
  314. struct    name    *usermap();
  315. struct    var    *lookup();
  316. long    transmit();
  317. int    icequal();
  318.